Screen%20Shot%202022-11-25%20at%203.09.38%20AM.png

Historical Performance¶

In [4]:
fig.show()

Three Factor Model (Fama-Fremch, 1993)¶

$$R_{s}-R_{f}=\alpha+\beta_{mkt}\left(R_{mkt}-R_{f}\right)+\beta_{SMB}R_{SMB}+\beta_{HML}R_{HML}$$

where:
$R_{s}-R_{f}$ = cost of equity
$R_{s}$ = return on stock
$R_{f}$ = risk-free rate
$\beta_{mkt}$ = market beta
$R_{mkt}$ = market premuim
$\beta_{SMB}$ = size beta
$R_{SMB}$ = size premuim
$\beta_{HML}$ = value beta
$R_{HML}$ = value premuim

*Model was chosen instead of traditional CAPM due to the stock's low Beta.

Get Monthly Fama-french 3 Factors from Kenneth R. French data library And Historical Returns

In [6]:
data.tail()
Out[6]:
Mkt-RF SMB HML RF ENB ENB.TO-RF
Date
2022-06-30 -0.0843 0.0209 -0.0597 0.0006 -0.084291 -0.084891
2022-07-31 0.0957 0.0281 -0.0410 0.0008 0.063181 0.062381
2022-08-31 -0.0377 0.0139 0.0031 0.0019 -0.068393 -0.070293
2022-09-30 -0.0935 -0.0082 0.0003 0.0019 -0.099952 -0.101852
2022-10-31 0.0783 0.0010 0.0806 0.0023 0.049865 0.047565

OLS Regression to Estimate Beta¶

In [8]:
print('Market Beta:',beta_m, 'Size Beta:', beta_s, 'Value Beta', beta_v)
results.summary()
Market Beta: 0.7469601433705513 Size Beta: 0.21813585209706277 Value Beta 0.47913501647151674
Out[8]:
OLS Regression Results
Dep. Variable: ENB.TO-RF R-squared: 0.496
Model: OLS Adj. R-squared: 0.469
Method: Least Squares F-statistic: 18.38
Date: Fri, 25 Nov 2022 Prob (F-statistic): 2.01e-08
Time: 02:51:04 Log-Likelihood: 95.829
No. Observations: 60 AIC: -183.7
Df Residuals: 56 BIC: -175.3
Df Model: 3
Covariance Type: nonrobust
coef std err t P>|t| [0.025 0.975]
const 0.0005 0.007 0.076 0.939 -0.013 0.014
Mkt-RF 0.7470 0.126 5.913 0.000 0.494 1.000
SMB 0.2181 0.255 0.856 0.396 -0.292 0.729
HML 0.4791 0.150 3.203 0.002 0.179 0.779
Omnibus: 1.942 Durbin-Watson: 1.871
Prob(Omnibus): 0.379 Jarque-Bera (JB): 1.235
Skew: 0.317 Prob(JB): 0.539
Kurtosis: 3.303 Cond. No. 39.6


Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

Calculate Cost of Equity

In [9]:
risk_free = data['RF'].mean()
risk_free
exp_return = risk_free + beta_m*market_premium + beta_s*size_premium + beta_v*value_premium
cost_capital=exp_return*12 
print(round(cost_capital*100,2),"%")
9.66 %

Three Stage Dividend Discount Model¶

$$P=\frac{D_{1}}{(R+1)^1}+\frac{D_{2}}{(R+1)^2}+ ... +\frac{D_{N}}{(R+1)^N}+\frac{D_{N}(1+G2)+D_{N}H(G1-G2)}{\frac{(R-G2)}{(R+1)^N}}$$

where:
$P$ = price
$D_{1}$ = value of next year dividend
$R$ = constant cost of equity capital
$N$ = period
$G1$ = High growth rate
$G2$ = Transitional growth rate
$G3$ = constant growth rate in perpetuity

Assumptions:
$N$ = 5
$G1$ = 10Y Historical Div Growth (mean: 10%, std: 8.5%)
$G2$ = 5Y Historical Div Growth (mean: 7%, std: 3.7%)
$G3$ = mean: 2%, std: 0.5%
$Beta$ = 5Y Historical Beta (mean: 0.80, std: 0.074)

In [11]:
fig = px.histogram(df, x="Price",nbins=1000,title="Probability Distribution")
fig.show()
#py.plot(fig, filename = 'dist', auto_open=True)
In [12]:
quants = df.quantile([i / 20 for i in range(1, 20)])
styled_df(quants)
Out[12]:
  High Growth Transitional Growth Perpetual Growth Cost of Capital Beta Price Upside
0.050000 -3.17% 0.95% 1.17% 9.13% 0.68 $43.36 -21.88%
0.100000 -0.06% 2.32% 1.36% 9.34% 0.71 $47.49 -14.43%
0.150000 2.04% 3.25% 1.48% 9.49% 0.73 $50.47 -9.06%
0.200000 3.68% 4.00% 1.58% 9.60% 0.74 $52.96 -4.58%
0.250000 5.07% 4.63% 1.66% 9.70% 0.75 $55.22 -0.51%
0.300000 6.35% 5.20% 1.74% 9.79% 0.76 $57.29 3.22%
0.350000 7.55% 5.72% 1.81% 9.87% 0.77 $59.27 6.79%
0.400000 8.69% 6.22% 1.87% 9.95% 0.78 $61.24 10.35%
0.450000 9.77% 6.71% 1.94% 10.03% 0.79 $63.21 13.89%
0.500000 10.83% 7.19% 2.00% 10.10% 0.8 $65.11 17.31%
0.550000 11.92% 7.65% 2.06% 10.18% 0.81 $67.06 20.83%
0.600000 13.04% 8.13% 2.13% 10.25% 0.82 $69.14 24.58%
0.650000 14.16% 8.62% 2.19% 10.33% 0.83 $71.36 28.58%
0.700000 15.34% 9.15% 2.26% 10.41% 0.84 $73.81 32.99%
0.750000 16.61% 9.72% 2.34% 10.50% 0.85 $76.45 37.74%
0.800000 18.02% 10.35% 2.42% 10.60% 0.86 $79.46 43.16%
0.850000 19.69% 11.09% 2.52% 10.72% 0.88 $83.14 49.81%
0.900000 21.80% 12.03% 2.64% 10.87% 0.9 $88.02 58.59%
0.950000 24.85% 13.39% 2.82% 11.08% 0.92 $95.78 72.58%
In [17]:
    fig = px.scatter(df, y='Price', x=input_cols[3],title="Cost of Capital Sensitivity")
    fig.show()
In [18]:
    fig = px.scatter(df, y='Price', x=input_cols[2],title="Beta Sensitivity")
    fig.show()
In [19]:
    fig = px.scatter(df, y='Price', x=input_cols[0],title="High Growth Sensitivity")
    fig.show()